package com.gugee.ins.data.task.blogger;

import com.gugee.common.task.dto.TaskParam;
import com.gugee.ins.data.task.blogger.service.*;
import com.gugee.ins.data.task.constant.TaskType;
import com.xiguaji.boot.toolkit.JsonUtil;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Created with IntelliJ IDEA.
 * Description:与播主相关的调度任务
 * User: luolifeng
 * Date: 2020-12-24 17:59
 */

@Component
@Slf4j
public class InsBloggerTask {

    @Autowired
    public InsMBloggerUpdateSvc insMBloggerUpdateSvc;
    @Autowired
    public InsBloggerUpdateSvc insBloggerUpdateSvc;
    @Autowired
    public InsMBloggerCollectSvc insMBloggerCollectSvc;

    /**
     *
     */
    @Autowired
    public InsMBloggerFollowerCollectSvc insMBloggerFollowerCollectSvc;

    /**
     *
     */
    @Autowired
    public InsMBloggerFollowingCollectSvc insMBloggerFollowingCollectSvc;

    /**
     *
     */
    @Autowired
    public InsBloggerLocationCollectSvc insBloggerLocationCollectSvc;

    /**
     *
     */
    @Autowired
    public InsMBloggerLowFollowerUpdateSvc insMBloggerLowFollowerUpdateSvc;

    @Autowired
    public InsCollectBloggerRelationSvc insCollectBloggerRelationSvc;

    /**
     *
     */
    @Autowired
    public InsMidBloggerUpdateSvc insMidBloggerUpdateSvc;

    /**
     * 大播主基础信息更新消息发送
     * @param param  {"records":2000,"topic":"mBlogger_update_day","pagesLimit":10000}
     *                  records:一页最多的记录数
     *                   topic：发送队列
     *                   pagesLimit：发送最大页数
     * @return 调度结果
     */
    @XxlJob("sendMBloggerMsg4UpdateBaseInfo")
    public ReturnT<String> sendMBloggerMsg4UpdateBaseInfo(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insMBloggerUpdateSvc.xxlJobStart(TaskType.MBLOGGER_UPDATE_4_BASEINFO.getValue(),"sendMBloggerMsg4UpdateBaseInfo",taskParam,false);
    }

    /**
     * 大播主收录
     * @param param  {"records":2000,"topic":"","pagesLimit":10000}
     *                  records:一次最多的收录的记录数
     *                   topic：发送队列，无需走队列
     *                   pagesLimit：发送最大页数
     * @return 调度结果
     */
    @XxlJob("insMBloggerCl")
    public ReturnT<String> insMBloggerCl(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insMBloggerCollectSvc.xxlJobStart(TaskType.MBLOGGER_COLLECT.getValue(),"insMBloggerCl",taskParam,false);
    }

    /**
     * 播主基本信息更新消息发送
     * @param param
     * @return
     */
    @XxlJob("sendBloggerMsg4UpdateBaseInfo")
    public ReturnT<String> sendBloggerMsg4UpdateBaseInfo(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insBloggerUpdateSvc.xxlJobStart(TaskType.BLOGGER_UPDATE_4_BASEINFO.getValue(),"sendBloggerMsg4UpdateBaseInfo",taskParam,false);
    }

    /**
     * 大播主粉丝信息发送
     * @param param  {"records":2000,"pagesLimit":10000}
     *                  records:一次最多的收录的记录数
     *                   pagesLimit：发送最大页数
     * @return 调度结果
     */
    @XxlJob("sendBloggerMsg4FollowerCl")
    public ReturnT<String> sendBloggerMsg4FollowerCl(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insMBloggerFollowerCollectSvc.xxlJobStart(TaskType.MBLOGGER_FOLLOWER_CL.getValue(),"sendBloggerMsg4FollowerCl",taskParam,false);
    }

    /**
     * 播主关注信息发送
     * @param param  {"records":2000,"pagesLimit":10000}
     *                  records:一次最多的收录的记录数
     *                   pagesLimit：发送最大页数
     * @return 调度结果
     */
    @XxlJob("sendBloggerMsg4FollowingCl")
    public ReturnT<String> sendBloggerMsg4FollowingCl(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insMBloggerFollowingCollectSvc.xxlJobStart(TaskType.MBLOGGER_FOLLOWING_CL.getValue(),"sendBloggerMsg4FollowingCl",taskParam,false);
    }

    /**
     * 大播主地理位置信息发送
     * @param param  {"records":2000,"pagesLimit":10000}
     *                  records:一次最多的收录的记录数
     *                   pagesLimit：发送最大页数
     * @return 调度结果
     */
    @XxlJob("sendBloggerMsg4LocationCl")
    public ReturnT<String> sendBloggerMsg4LocationCl(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insBloggerLocationCollectSvc.xxlJobStart(TaskType.BLOGGER_LOCATION_CL.getValue(),"sendBloggerMsg4LocationCl",taskParam,false);
    }

    /**
     * 降粉大博主更新信息发送
     * @param param  {"records":2000,"pagesLimit":10000}
     *                  records:一次最多的收录的记录数
     *                   pagesLimit：发送最大页数
     * @return 调度结果
     */
    @XxlJob("sendMBloggerMsg4UpdateLowFollowerBaseInfo")
    public ReturnT<String> sendMBloggerMsg4UpdateLowFollowerBaseInfo(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insMBloggerLowFollowerUpdateSvc.xxlJobStart(TaskType.MBLOGGER_UPDATE_4_LOW_FOLLOWER_BASEINFO.getValue(),"sendMBloggerMsg4UpdateLowFollowerBaseInfo",taskParam,false);
    }

    /**
     * 将ins_blogger_relation最近一段时间的未收录的播主发送至队列
     * @param param  {
     *               "pagesLimit":0,  如果为0 表示startPage为最近N小时  ，如果非0，则以时间戳表示结束时间
     *               "startPage":1   最近1（小时）   如果非0，则以时间戳表示起始时间
     *               }
     * @return 调度结果
     */
    @XxlJob("spider_uid_from_BloggerRelation")
    public ReturnT<String> updateBlogger(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insCollectBloggerRelationSvc.xxlJobStart(TaskType.BLOGGER_CL_2_RELATION.getValue(),"spider_uid_from_BloggerRelation",taskParam);
    }

    /**
     * 中播主数据更新信息发送
     * @param param  {"records":2000,"pagesLimit":10000}
     *                  records:一次最多的收录的记录数
     *                   pagesLimit：发送最大页数
     * @return 调度结果
     */
    @XxlJob("sendBloggerMsg4UpdateMiddleBloggerBaseInfo")
    public ReturnT<String> sendBloggerMsg4UpdateMiddleBloggerBaseInfo(String param) {
        TaskParam taskParam = JsonUtil.jsonParse(TaskParam.class, param);
        return insMidBloggerUpdateSvc.xxlJobStart(TaskType.MBLOGGER_UPDATE_4_MIDDLE_BLOGGER_BASEINFO.getValue(),"sendBloggerMsg4UpdateMiddleBloggerBaseInfo",taskParam,false);
    }
}
